package com.irdstudio.efp.rule.common.enumeration;

import java.util.stream.Stream;

/**
 * @description:规则枚举
 * 	<b>新增征信规则集 add wangyk3 date:2018/12/26</b>
 * @author:hengyh
 */
public enum Rule {
	
	/*************************准入规则集start*******************************/
//	AGE(RuleType.ACCESS, "AccessRule001", "不符合准入规则"), // 年龄判断--准入规则
//	AGE2(RuleType.ACCESS, "AccessRule001_2", "不符合准入规则"), // 年龄判断--准入规则
//	RELATION(RuleType.ACCESS, "AccessRule002", "不符合准入规则"), // 关系人--准入规则
//	BLACKLIST(RuleType.ACCESS, "AccessRule003", "其他黑名单"), // 黑名单判断--准入规则
	LOANAMT(RuleType.ACCESS, "AccessRule004", "不符合准入规则"), // 产品校验-贷款金额校验--准入规则
	LOANTERM(RuleType.ACCESS, "AccessRule005", "不符合准入规则"), // 产品校验-贷款期限校验--准入规则
	LOANBAL(RuleType.ACCESS, "AccessRule006", "不符合准入规则"), // 产品校验-贷款余额校验--准入规则
//	BANKER(RuleType.ACCESS, "AccessRule007", "不符合准入规则"), // 行员判断--准入规则
//	BDAMTCHECK1(RuleType.ACCESS, "AccessRule008", "不符合准入规则"), // 额度管控--准入规则
	BDISDURING1(RuleType.ACCESS, "AccessRule009", "不符合准入规则"), //有效授信--存在在途申请
	/*************************准入规则集end*******************************/
	
	/*************************百度准入规则集start*******************************/
	BDAGE(RuleType.BDACCESS, "BdAccessRule001", "不符合准入规则"), // 年龄判断--准入规则
	BDRELATION(RuleType.BDACCESS, "BdAccessRule002", "不符合准入规则"), // 关系人--准入规则
	BDLOANAMT(RuleType.BDACCESS, "BdAccessRule003", "不符合准入规则"), // 产品校验-贷款金额校验--准入规则
	BDBANKER(RuleType.BDACCESS, "BdAccessRule004", "不符合准入规则"), // 行员判断--准入规则
	BDPRECUST(RuleType.BDACCESS, "BdAccessRule005", "不符合准入规则"), //人群分层--准入规则
	BDOTHERCRT(RuleType.BDACCESS, "BdAccessRule007", "不符合准入规则"), //存在其他有效额度--准入规则 
	BDLMTAMT(RuleType.BDACCESS, "BdAccessRule008", "不符合准入规则"), //申请额度高于可用额度--准入规则
	BDOTHERPRD(RuleType.BDACCESS, "BdAccessRule009", "不符合准入规则"), //存在其他产品有效额度--准入规则
	BDOTHERLET(RuleType.BDACCESS, "BdAccessRule011", "不符合准入规则"), //存在其他有效用信--准入规则
	BDAMTCHECK(RuleType.BDACCESS, "BdAccessRule012", "不符合准入规则"), //额度管控--准入规则
	BDISAVAILAPPLY(RuleType.BDACCESS, "BdAccessRule013", "不符合准入规则"), //有效授信--准入规则
	BDISDURING(RuleType.BDACCESS, "BdAccessRule014", "不符合准入规则"), //有效授信--存在在途申请
	BDISCREDITINVALID(RuleType.BDACCESS, "BdAccessRule015", "不符合准入规则"), //有效授信--授信期限已过
	/*************************准入规则集end*******************************/
	
	/************************* 税E贷准入规则集 start*******************************/
	SED_RELATION(RuleType.SED_ACCESS, "SedCreditAccRule001", "不符合准入规则"), // 关联人--准入规则
	SED_BANKER(RuleType.SED_ACCESS, "SedCreditAccRule002", "不符合准入规则"),   // 行员判断--准入规则
	SED_AGE(RuleType.SED_ACCESS, "SedCreditAccRule003", "不符合准入规则"),      // 年龄判断--税E贷授信准入规则
	SED_BLACK_LIST(RuleType.SED_BLACK_LIST, "SedCreditAccRule005", "其他黑名单"),  // 黑名单判断--准入规则
	SED_CREDIT_PERSONAL_LOAN(RuleType.SED_PERSONAL_LOAN,"SedCreditAccRule004", "个贷已存在额度有效的授信和贷款余额或者申请在途的贷款"),//个贷存在额度判断--税E贷授信准入规则
	SED_APPLY_AGE(RuleType.SED_APPLY_ACCESS, "SedApplyAccRule001", "不符合准入规则"), // 年龄判断--支用申请准入规则
	/************************* 税E 准入规则集 end*******************************/

	/*************************征信规则集start*******************************/
	OVERDUENUM(RuleType.ZX, "CcrcRule001", "人行征信相关规则"), // 当前贷款逾期次数判断--征信规则
	CCABNORMALNUM(RuleType.ZX, "CcrcRule002", "人行征信相关规则"), // 贷记卡账户状态为异常次数判断--征信规则
	SCCABNORMALNUM(RuleType.ZX, "CcrcRule003", "人行征信相关规则"), // 当前贷款逾期次数判断--征信规则
	LOANOVERDUE12MCONTNUM(RuleType.ZX, "CcrcRule004", "人行征信相关规则"), // 最近12月连续逾期贷款次数判断--征信规则
	LOANOVERDUE12MTOTALNUM(RuleType.ZX, "CcrcRule005", "人行征信相关规则"), // 最近12月累计逾期贷款次数判断--征信规则
	CCOVERDUE12MCONTNUM(RuleType.ZX, "CcrcRule006", "人行征信相关规则"), // 最近12月连续逾期贷记卡和准贷记卡次数判断--征信规则
	CCOVERDUE12MTOTALNUM(RuleType.ZX, "CcrcRule007", "人行征信相关规则"), // 最近12月累计逾期贷记卡和准贷记卡次数判断--征信规则
	LOANSPECNUM(RuleType.ZX, "CcrcRule008", "人行征信相关规则"), // 贷款特殊情况次数判断--征信规则
	LOAN5CCABNORMALNUM(RuleType.ZX, "CcrcRule009", "人行征信相关规则"), // 贷款五级分类异常次数判断--征信规则
	SCCOVERDUE180DNUM(RuleType.ZX, "CcrcRule010", "人行征信相关规则"), // 准贷记卡逾期180天次数判断--征信规则
	CREDITQUERYNUM(RuleType.ZX, "CcrcRule011", "人行征信相关规则"), // 近1个月征信查询次数判断--征信规则
	/*************************征信规则集end*******************************/

	/*************************马上二代征信规则集start*******************************/
	MSOVERDUENUM(RuleType.MSZX, "MSZX001", "人行征信相关规则"), // 当前贷款逾期次数判断--征信规则
	MSCCABNORMALNUM(RuleType.MSZX, "MSZX002", "人行征信相关规则"), // 贷记卡账户状态为异常次数判断--征信规则
	MSSCCABNORMALNUM(RuleType.MSZX, "MSZX003", "人行征信相关规则"), // 准贷记卡账户状态为异常次数判断--征信规则
	MSLOANOVERDUE12MCONTNUM(RuleType.MSZX, "MSZX004", "人行征信相关规则"), // 最近12月连续逾期贷款次数判断--征信规则
	MSLOANOVERDUE12MTOTALNUM(RuleType.MSZX, "MSZX005", "人行征信相关规则"), // 最近12月累计逾期贷款次数判断--征信规则
	MSCCOVERDUE12MCONTNUM(RuleType.MSZX, "MSZX006", "人行征信相关规则"), // 最近12月连续逾期贷记卡次数判断--征信规则
	MSCCOVERDUE12MTOTALNUM(RuleType.MSZX, "MSZX007", "人行征信相关规则"), // 最近12月累计逾期贷记卡次数判断--征信规则
	MSSCOVERDUE12MCONTNUM(RuleType.MSZX, "MSZX008", "人行征信相关规则"), // 最近12月连续逾期准贷记卡次数判断--征信规则
	MSSCOVERDUE12MTOTALNUM(RuleType.MSZX, "MSZX009", "人行征信相关规则"), // 最近12月累计逾期准贷记卡次数判断--征信规则
	MSLOANSPECFLAG(RuleType.MSZX, "MSZX010", "人行征信相关规则"), // 贷款特殊情况标识判断--征信规则
	MSLOAN5SUM(RuleType.MSZX, "MSZX011", "人行征信相关规则"), // 贷款五级分类异常次数判断--征信规则
	MSOD180DAYSUNPYDBALSUM(RuleType.MSZX, "MSZX012", "人行征信相关规则"), // 准贷记卡逾期180天次数判断--征信规则
	MSAPRVLQRYTMSSUM(RuleType.MSZX, "MSZX013", "人行征信相关规则"), // 近1个月征信查询次数判断--征信规则
	MSWHITECUS(RuleType.MSZX, "MSZX014", "人行征信相关规则"), // 征信系统中无客户征信数据的判断--征信规则
	MSACCTCNTSUM(RuleType.MSZX, "MSZX015", "人行征信相关规则"), // 客户个人征信报告中无任何贷款、贷记卡和准贷记卡信息的判断--征信规则
	/*************************马上二代征信规则集end*******************************/

	/*************************百度征信规则集start*******************************/
	// 贷款当前状态不为“正常”或者“结清”
	BDZXRULE01(RuleType.BD_CREDIT_RULE,"BDZX001","百度征信准入规则"),
	// 任意一张贷记卡当前状态为:"逾期","呆账","冻结","止付"
	BDZXRULE02(RuleType.BD_CREDIT_RULE,"BDZX002","百度征信准入规则"),
	// 任意一张准贷记卡当前状态为:"逾期","呆账","冻结","止付"
	BDZXRULE03(RuleType.BD_CREDIT_RULE,"BDZX003","百度征信准入规则"),
	// 贷款最近12个月连续3次或者以上逾期（任意一笔贷款）
	BDZXRULE04(RuleType.BD_CREDIT_RULE,"BDZX004","百度征信准入规则"),
	// 贷记卡最近12个月连续3次或者以上逾期（任意一笔贷款）
	BDZXRULE05(RuleType.BD_CREDIT_RULE,"BDZX005","百度征信准入规则"),
	// 贷款出现“呆账”，“资产处置”，“保证人代偿”
	BDZXRULE06(RuleType.BD_CREDIT_RULE,"BDZX006","百度征信准入规则"),
	// 贷款五级分类为“次级”,可疑，“损失”任意一笔贷款
	BDZXRULE07(RuleType.BD_CREDIT_RULE,"BDZX007","百度征信准入规则"),
	// 近一个月查询次数>=10次，（贷款申请+信用卡申请）
	BDZXRULE08(RuleType.BD_CREDIT_RULE,"BDZX008","百度征信准入规则"),
	/*************************百度征信规则集end*******************************/
	
		/*************************税局准入规则集start*******************************/
	ISAUTHRIZED(RuleType.TAX, "TaxAccessRule001", "税局准入规则-客户未授权我行查询纳税信息"), //客户未授权我行查询纳税信息--税局准入规则
	AUTHOVERDUESTATE(RuleType.TAX, "TaxAccessRule002", "税局准入规则-客户授权我行查询纳税信息已过期"),  //客户授权我行查询纳税信息已过期--税局准入规则
	CANNOTGETCUSTAXINFO(RuleType.TAX, "TaxAccessRule003", "税局准入规则-无法获取客户纳税信息"), //无法获取客户纳税信息--税局准入规则
	INDIVINCOMETAXMONTHS(RuleType.TAX, "TaxAccessRule004", "税局准入规则-近12个月纳税累计缴存月份数小于11"),  //近12个月纳税累计缴存月份数小于11--税局准入规则
	INCOMELESSTHANAVG(RuleType.TAX, "TaxAccessRule005", "税局准入规则-近12个月“工资薪金所得”小于借款人代扣代缴单位所属地市的准入年收入"), //近12个月“工资薪金所得”小于借款人代扣代缴单位所属地市的准入年收入--税局准入规则
	WITHHOLDORREMITFLAG(RuleType.TAX, "TaxAccessRule006", "税局准入规则-代扣代缴标志为“0-非”"), //代扣代缴标志为“0-非”--税局准入规则
	SLFEMPLYOWNFLG(RuleType.TAX, "TaxAccessRule007", "税局准入规则-个体户业务标志为“1-是”"), 	//个体户业务标志为“1-是”--税局准入规则
	TAXAGAINSTLAWINFONUM(RuleType.TAX, "TaxAccessRule008", "税局准入规则-借款人存在违法违章信息"), //借款人存在违法违章信息--税局准入规则
	APRVBANKNOWTHN40DAYSNUM(RuleType.TAX, "TaxAccessRule009", "税局准入规则-近40天获批银行数量为大于或等于3"), //近40天获批银行数量为大于或等于3--税局准入规则
	QRYDRCRDINFNUM(RuleType.TAX, "TaxAccessRule010", "税局准入规则-近40天被银行查询纳税信息记录大于或等于5且40天内获批银行数量小于2"),	//近40天被银行查询纳税信息记录大于或等于5且40天内获批银行数量小于2--税局准入规则
	/*************************税局准入规则集end*******************************/

	/*************************征信准入规则集start*******************************/
	//借款人无人行征信记录
    ZXRULE01(RuleType.GENERATION_CREDIT_RULE,"SEDZX001","征信准入规则"),
    //资产处置信息汇总>=1
    ZXRULE02(RuleType.GENERATION_CREDIT_RULE,"SEDZX002","征信准入规则"),
    //保证人代偿信息汇总>=1
    ZXRULE03(RuleType.GENERATION_CREDIT_RULE,"SEDZX003","征信准入规则"),
    //呆账汇总信息>=1
    ZXRULE04(RuleType.GENERATION_CREDIT_RULE,"SEDZX004","征信准入规则"),
    //公共信息中的“养老保险金发放记录”有发放记录（本月实发养老金为非空值）
    ZXRULE05(RuleType.GENERATION_CREDIT_RULE,"SEDZX005","征信准入规则"),
    //公共信息明细中“强制执行记录”的“案件状态”为“列入失信被执行人名单”或“执行完毕”
    ZXRULE06(RuleType.GENERATION_CREDIT_RULE,"SEDZX006","征信准入规则"),
    //任一张贷记卡、准贷记卡当前逾期
    ZXRULE07(RuleType.GENERATION_CREDIT_RULE,"SEDZX007","征信准入规则"),
    //任一张贷记卡、准贷记卡“账户状态”出现冻结、止付、呆账、核销，且该卡“最大使用额度”>=600
    ZXRULE08(RuleType.GENERATION_CREDIT_RULE,"SEDZX008","征信准入规则"),
    //任一笔贷记卡、准贷记卡“特殊交易类型”为“资抵债”
    ZXRULE09(RuleType.GENERATION_CREDIT_RULE,"SEDZX009","征信准入规则"),
    //任一张贷记卡、准贷记卡逾期1
    ZXRULE10(RuleType.GENERATION_CREDIT_RULE,"SEDZX010","征信准入规则"),
    //任一张贷记卡、准贷记卡逾期2
    ZXRULE11(RuleType.GENERATION_CREDIT_RULE,"SEDZX011","征信准入规则"),
    //未销户贷记卡总账
    ZXRULE12(RuleType.GENERATION_CREDIT_RULE,"SEDZX012","征信准入规则"),
    //任一张贷记卡、准贷记卡有逾期/透支180天上未还款记录
    ZXRULE13(RuleType.GENERATION_CREDIT_RULE,"SEDZX013","征信准入规则"),
    //任一笔贷款当前逾期
    ZXRULE14(RuleType.GENERATION_CREDIT_RULE,"SEDZX014","征信准入规则"),
    //任一笔贷款“账户状态”出现冻结、呆账、核销
    ZXRULE15(RuleType.GENERATION_CREDIT_RULE,"SEDZX015","征信准入规则"),
    //任一笔贷款“五级分类”为关注、次级、可疑、损失
    ZXRULE16(RuleType.GENERATION_CREDIT_RULE,"SEDZX016","征信准入规则"),
    //“对外贷款担保信息”中任一笔“担保贷款五级分类”为关注、次级、可疑、损失
    ZXRULE17(RuleType.GENERATION_CREDIT_RULE,"SEDZX017","征信准入规则"),
    //任一笔贷款“特殊交易类型”为“资抵债”
    ZXRULE18(RuleType.GENERATION_CREDIT_RULE,"SEDZX018","征信准入规则"),
    //任一笔贷款，近6个月逾期次数>=2次，近12个月逾期次数>=3次，近24个月逾期次数>=5次
    ZXRULE19(RuleType.GENERATION_CREDIT_RULE,"SEDZX019","征信准入规则"),
    //任一笔贷款，近6个月最高逾期期数>=2期，近12个月最高逾期期数>=2期，近24个月最高逾期期数>=3期
    ZXRULE20(RuleType.GENERATION_CREDIT_RULE,"SEDZX020","征信准入规则"),
    //最近2个月内他行及我行因“信用卡审批”或“贷款审批”而查询报告的次数>=4次(注：同一个自然月内“查询操作员”和“查询原因”相同的查询，认定为1次）
    ZXRULE21(RuleType.GENERATION_CREDIT_RULE,"SEDZX021","征信准入规则"),
    //最近3个月内他行及我行因“信用卡审批”或“贷款审批”而查询报告的次数>=7次(注：同一个自然月内“查询操作员”和“查询原因”相同的查询，认定为1次）
    ZXRULE22(RuleType.GENERATION_CREDIT_RULE,"SEDZX022","征信准入规则"),
	//中征信1000评分≤700
    ZXRULE23(RuleType.GENERATION_CREDIT_RULE,"SEDZX023","征信准入规则"),
	/*************************税E贷征信准入规则集end*******************************/


	/*************************同盾准入规则集start*******************************/
	// 同盾评分>200！
	WHIELDRISK01(RuleType.WHIELD_RISK, "WHIELDRISKRULE001", "同盾风险准入规则"),
	// 同盾多头借贷数据最近3个月内申请次数>=7次，最近12个月内申请次数>=11次！
	WHIELDRISK02(RuleType.WHIELD_RISK, "WHIELDRISKRULE002", "同盾风险准入规则"),
	// 同盾数据最近6个月内被放款平台数>=2个，最近12个月内被放款平台数>=3个！
	WHIELDRISK03(RuleType.WHIELD_RISK, "WHIELDRISKRULE003", "同盾风险准入规则");
	/*************************同盾准入规则集end*******************************/

	private RuleType type; // 规则类型
	private String ruleId; // 规则id
	private String msg; // 规则类型
	/**
	 * @param type 规则类型
	 * @param ruleId 规则id，对应于规则配置文件中的id
	 */
	Rule(RuleType type, String ruleId, String msg) {
		this.type = type;
		this.ruleId = ruleId;
		this.msg = msg;
	}

	public String getType() {
		return this.type.toString();
	}

	public String getRuleId() {
		return this.ruleId;
	}
	
	public String getMsg() {
		return this.msg;
	}
	
	public static Rule parseWithRuleId(String ruleId) {
		return Stream.of(values()).filter(i -> i.getRuleId().equals(ruleId))
				.findAny()
				.orElseThrow(() -> new IllegalArgumentException("请检查Rule类与数据库配置的一致性！"));
	}
	/**
	 * @description:规则类型 目前有 1.准入 2.征信
	 * @author:hengyh
	 */
	public static enum RuleType {
		ACCESS, ZX,MSZX, BDACCESS,BD_CREDIT_RULE, TAX, SED_ACCESS,SED_APPLY_ACCESS,GENERATION_CREDIT_RULE,WHIELD_RISK,SED_BLACK_LIST,SED_PERSONAL_LOAN;
		public String toString() { return name().toLowerCase(); }
	}
	
}
